package cn.kk.utils;

import org.apache.commons.collections.CollectionUtils;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.function.Function;

/**
 * 集合工具类
 * @author liujunkai
 * @date 2023/4/17 16:32
 */
public class CollectionUtil extends CollectionUtils {

    /**
     * 比较集合完全相同
     * @param collection1 集合1
     * @param collection2 集合2
     * @return 是否完全相同
     */
    public static boolean equals(List<?> collection1, List<?> collection2) {
        if (collection1.size() != collection2.size()) {
            return false;
        }
        // 先通过hash先进性排序，再toString对比字符串
        collection1.sort(Comparator.comparing(Object::hashCode));
        collection2.sort(Comparator.comparing(Object::hashCode));
        System.out.println(collection1);
        System.out.println(collection2);
        return collection1.toString().equals(collection2.toString());
    }

    /**
     * 根据集合内对象的某个属性去重，保留第一个属性相同的对象
     * @param list     集合
     * @param property 属性
     * @param <T>      集合对象类型
     * @param <R>      属性类型
     * @return 去重后的对象集合
     */
    public static <T, R> List<T> distinct(List<T> list, Function<T, R> property) {
        HashSet<R> set = new HashSet<>();
        List<T> distinctList = new ArrayList<>();
        for (T object : list) {
            R value = ObjectUtil.getPropertyValue(object, property);
            if (!set.contains(value)) {
                set.add(value);
                distinctList.add(object);
            }
        }
        return distinctList;
    }

}